[GAS]SentinelOne APIを利用して指定したアプリがインストールされているPC一覧を取得
- t_o_dと申します。
- SentinelOneでの脆弱性管理の際に、SentinelOne APIを利用すると容易に情報を取得することができます。
- そこでGASとSentinelOne APIを利用して、指定したアプリがインストールされているPC一覧を取得する方法を記録いたします。
環境
- mac OS Monterey 13.0
- Google Apps Script
注意
- ※こちらの機能はEA(Early Access)版、いわゆるBeta版扱いであり取得情報が不安定な部分も見受けられるため、ご利用の際は十分にご検討ください。
- 例 : 「最新バージョンを脆弱性バージョンと誤検知」や「取得バージョンの誤り」等。
手順
EA(EarlyAccessProgram)の有効化
- 現時点でEA(EarlyAccessProgram)、いわゆるBeta版扱いであるため利用するには事前に有効化する必要があります。
- まず、SentinelOneの管理画面にアクセスしてサイドメニューの「Settings」をクリックして「Early Access Program」欄へ移動します。
- そして「Join the SentinelOne Early Access Program」をONにして有効化してください。
APIトークンの生成
- SentinelOneから情報を取得するために必要なトークンを生成します。
- まず、SentinelOneの管理画面にアクセスして右上から「My User」をクリックしてください。
- 次にポップアップされた画面の「Options」から「generate API token」もしくは「Regenerate API token」をクリックしてください。
- クリック後、APIトークンが表示されるのでメモしておいてください。
プロパティ設定
- GASのスクリプトエディタを開いたら、スクリプトプロパティに以下の内容を設定してください。
プロパティ | 値 |
---|---|
SENTINEL_BASE | SentinelOne API URL 例: https://xxxxxx.sentinelone.net/web/api/v2.1 xxxxxxの部分は契約しているSentinelOneアカウントです。 |
SENTINEL_TOKEN | 上記手順で取得したAPIトークン |
コード記述
- プロパティ設定後、以下の内容をスクリプトエディタの任意のgsファイルに記述。
const properties = PropertiesService.getScriptProperties().getProperties(); const baseAPi = properties.SENTINEL_BASE const token = properties.SENTINEL_TOKEN // メイン処理 function main(){ // 検索アプリケーション名 // 例 : Docker const appName = 'Docker' // マッチしたアプリケーション情報 const applications = searchApplications(token, appName) // マッチしたPC名リスト const pcs = Object.keys(applications) // 出力 console.log(`カウント : ${pcs.length}`) console.log(`マッチPC一覧 : ${pcs}`) } // ハイリスクアプリケーション取得 function searchApplications(token, appName){ const result = {}; let cursor = ''; do { const res = UrlFetchApp.fetch(`${baseAPi}/installed-applications?limit=1000&cursor=${cursor}&name__contains=${appName}`,{ method: 'get', headers: { 'Authorization': `ApiToken ${token}`, } }) const json = JSON.parse(res.getContentText()) json.data.forEach(app => { if(app.agentComputerName in result){ result[app.agentComputerName].push(app.name) } else { result[app.agentComputerName] = [app.name] } }) cursor = json.pagination.nextCursor ?? ''; }while(cursor) return result }
実行
- コード記述後、コード内の「appName」を任意の値に修正します。
- ※例としてDockerを検索しています。
- 修正後main関数を実行して、実行ログが以下のようにマッチ数とPC名一覧を出力することを確認します。
- 以上です。
まとめ
- アプリ名で対象PCを検索することで把握や分析等、さまざまな状況に活用できると感じました。
- 今後もSentinelOne APIのさまざまなサービスを適宜利用していき、日々の業務改善に努めてまいります。
参考
- 公式ドキュメント_全体 : https://xxxxxx.sentinelone.net/api-doc/
- 公式ドキュメント_アプリケーション情報 : https://xxxxxx.sentinelone.net/api-doc/api-details?category=application-risk&api=get-applications
アノテーション株式会社について
アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、様々な背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社WEBサイトをご覧ください。